package lsl.Git.本地仓库;

public class C01认识Git {
}
/*
        Git分布式版本控制工具目标:
            1.了解Git基本概念
            2.概素Git工作流程
            3.能够使用Git的常用命令
            4.熟悉Git代码托管服务(GitHub啥的,gitee码云啥的)
            5.可以使用idea操作Git(最关键的)
                /我们以后很少敲命令的,idea帮我集成好了




        概述:
            /开发的场景中我们经常遇到一些问题,基于这些问题我们提出了版本控制的概念
                场景1-->备份:
                    /我们本来写完了,但是你的硬盘直接崩了你就废了,避免我们的代码丢失
                        /我们的代码不能只能放到我们自己的电脑上
                            /如重要的东西我们备份到网盘上,Mysql的数据我们也会进行备份

                场景2-->代码还原:
                    /一个复杂的功能,我jb一顿改,改完5个版本之后,我觉得1版本还是不错的
                        /怎么回滚?  废了

                场景3-->协同开发:
                    /我们的项目非常大,不可能就你一个,多个人的代码怎么放到一起?
                        /用U盘吗?,垃圾!!!!!!!!

                场景4-->:追溯问题代码的编写人和编写时间
                    /你jb出现问题了,代码谁写的,没人承认
                        /日志可以很快定位到代码的问题,但是定位不到人写的

                    解决:
                        /版本控制,你每修改一次代码就是一个版本,这个代码是谁写的我们加上一个版本号
                            /这样上面的问题全部解决了




        常用的版本控制方式:
            1.集中式版本控制工具(SVN和CVS):
                /SVN是集中式版本控制系统，版本库是集中放在中央服务器的,team中的每个人工作时,从中央服务器下载代码
                    /是必须联网才能工作.局域网或者互联网,个人修改后提交到中央版本库
                        /三个电脑,同时开发一个项目,都会修改代码怎么办
                            /找一个中央服务器,维护一个版本,无论谁修改都告诉服务器,我要修改了,你给我记录一个版本号,其他也一样的

                        工作流程如下:
                            1.从中央服务器远程仓库下载代码
                            2.修改后将代码提交到中央服务器远程仓库

                        优缺点:
                         优点: 简单,易操作
                         缺点:所有代码必须放在中央服务器
                               1.服务器一旦宕机无法提交代码,即容错性较差
                               2.离线无法提交代码,无法及时记录我们的提交行为
                               3.我们把所有的版本放到同一个服务器上,你要是服务器的磁盘蹦了,怎么办


                       //SVN早起是爹来的,CVS是微软的,但是都过时了,我们已经不用了,全部都用GIt




            2.分布式版本控制工具(Git):
                /这个就是用来解决上面的问题的
                    /Git本来就是用来管理Linux的内核的代码,而开发出来的,但是发现太jb好用了
                        /我们有一个中央共享版本库,但是每个人单独的也有一个版本库,你修改完之后,在推给中央版本库
                            /共享版本库中如果有新的版本你也可以拉过来
                                /即使中央版本库崩了,也没关系,随便哪一个开发人员的版本库,放上来就行
                                    /就不存在宕机的问题,因为每个人的电脑上都有一个版本库
                                        /这样我们就不需要联网了,因为我自己就有一个版本库,链接中央服务器不是必须的
                                        /我们可以互相推代码的,但是那太乱了,所以我们都推给中英服务器即可

                Git是分布式版本控制系统（Distributed Version Control System，简称 DVCS），分为两种类型的仓库：
                    本地仓库和远程仓库
                    工作流程如下:
                        1．从远程仓库中克隆或拉取代码到本地仓库(clone/pull)
                        2．从本地进行代码修改
                        3．在提交前先将代码提交到暂存区
                        4．提交到本地仓库。本地仓库中保存修改的各个历史版本
                        5．修改完成后，需要和团队成员共享代码时，将代码push到远程仓库

                    总结:git和svn的区别
                        1. svn 是集中式版本控制工具,git 是分布式版本控制工具
                        2. svn 不支持离线提交,git 支持离线提交代码


               Git的目标:
                   1.速度:
                       /我们知道SVN,每一次生成一个版本或者生成一个分支的时候,尤其是这个分支,他会把整个文件复制一份,非常的浪费空间
                       /Git就没有这样的问题,速度非常快,因为不需要复制,我们自己就是一个版本库
                   2.简单的设计
                   3.对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
                       /Linux不是一个人写的,有人开发这个不分,有人开发哪个部分,允许把所有人的代码放到一起整合
                   4.完全分布式:
                        /中心化去掉,没有绝对的中心服务器,任何一个电脑都有完整的版本
                   5.有能力高效管理超大规模的项目(速度和数据量)
                        /人家Git本来就是用来管理Git的






            # 3. Git 发展简史
                /林纳斯·本纳第克特·托瓦兹（Linus Benedict Torvalds, 1969年~ ）
                /很多人都知道，Linus在1991年创建了开源的Linux，从此，Linux系统不断发展，已经成为最大的服务器系统软件了。
                /Linus虽然创建了Linux，但Linux的壮大是靠全世界热心的志愿者参与的，这么多人在世界各地为Linux编写代码，那Linux的代码是如何管理的呢？
                /事实是，在2002年以前，世界各地的志愿者把源代码文件通过diff的方式发给Linus，然后由Linus本人通过**手工方式合并代码！**
                你也许会想，为什么Linus不把Linux代码放到版本控制系统里呢？那个年代不是有CVS、SVN这些免费的版本控制系统吗？因为Linus坚定地反对CVS和SVN，这些集中式的版本控制系统不但速度慢，**而且必须联网才能使用**。
                    /有一些商用的版本控制系统，虽然比CVS、SVN好用，但那是**付费**的，和Linux的开源精神不符。
                /不过，到了2002年，Linux系统已经发展了十年了，代码库之大让Linus很难继续通过手工方式管理了，社区的弟兄们也对这种方式表达了强烈不满，于是Linus选择了一个商业的版本控制系统BitKeeper，
                    /BitKeeper的东家BitMover公司出于人道主义精神，授权Linux社区免费使用这个版本控制系统。而授权的前提是:Linux 社区的人不能开发具有相同功能的竞争产品!
                /另一方面,BitKeeper不是开源的. 显然与Linux 的开源精神不相符,所以linux 社区的很多人抱怨,不愿意使用.
                /典型的就是  Andrew Tridgell  (Samba 开发服务的创造者) 非常不满.偷偷违反了和 BitKeeper 的协议,反编译 BitKeeper 的源代码,开发了个爬虫,然后爬取信息被人发现了.
                    /BitKeeper 公司的领导非常不满意,然后开始发布消息说,(下个版本)不再为Linux 提供免费的服务.
                /Linus  本人就出面协调(几周或者几个月),但是不管用, 没办法. 估计谈判的过程感觉到了憋屈--"吃人嘴短,拿人手软"
                /Linus  本人 花了10天的时间Git 出来了,一个月之内，Linux系统的源码已经由Git管理了！



            Git 出来以后毕竟是一个人做的,开始并不好用(刚开始只能用勉强可以用来形容), 还是很多人抱怨,发展了很多年都没有干过其他软件.
            直到 2008年，GitHub网站上线了，它为开源项目免费提供Git存储，无数开源项目开始迁移至GitHub,从此git 迎来了飞速发展,当下git 已经成为了最流行的版本控制工具




            对于Git的工作流程:
                /我们先学习本地仓库,过程中我们在学习远程仓库的概念
                /这样在看你的流程图
 */
